Cryptographic hash functions are utilized in connection with many types of applications. Cryptographic hash functions are utilized for message authenticity or integrity checks, digital signatures, password authentication, cryptographically secure communication protocols, and similar applications. Cryptographic hash functions can also be utilized to detect data file modifications or duplications. In some cases, the cryptographic hash functions are utilized to detect data loss via checksums or similar functions. Cryptographic hash functions are distinct from general hash algorithms that are utilized to generate indices for mapping data into a table.
Cryptographic hash functions are deterministic functions that can operate on any size of input data and return a fixed-size hash value. The probability that any two sets of input data would have the same hash value is so low that the hash values can be relied upon as identifiers for the original data set for purposes of verification, authentication, error detection, data loss and similar functions. Cryptographic hash functions are extremely difficult to reverse (i.e., construct an original data set from a hash value. Due to the low probability of obtaining identical hash values for different data sets, it is also very difficult to modify a data set without changing its hash value. Cryptographic hash value computations are generally not computationally intense, allowing them to be utilized in encrypted communication protocols and similar contexts where a large amount of data must be processed or transmitted quickly.
Commonly utilized cryptographic hash functions include MD5, SHA-1, and HMAC. Periodically, mathematical weaknesses are found in cryptographic hashing functions. This exposes data that was in any way protected by the weak cryptographic hashing functions, sometimes many years after the hashing function was utilized. The newest hashing functions such as SHA-512 are more secure and produce large hash values (i.e., 512 bits), but require 64-bit integer operations, which are more computationally intensive and not supported by many platforms such as embedded platforms.